/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package appfacturacion;

import java.util.ArrayList;

/**
 *
 * @author operador
 */
public class AdmProductos {
    private ArrayList<Producto> productos;

    public AdmProductos(){
        // Inicializar la coleccion de productos
        productos = new ArrayList<Producto>();
    }



    public void registrar(String codigo, String nombre, double precio) 
            throws BusinessException {
        validarDatos(codigo,nombre, precio);
        validarDuplicado(codigo);
        // Crear un nuevo producto
        Producto producto = new Producto(codigo, nombre, precio);
        // Adicionar el nuevo producto a la colección
        productos.add(producto);

    }

    public Producto buscar(String codigo) {
        for(Producto producto : productos)
            if (producto.getCodigo().equals(codigo))
                return producto;
        return null;
    }

    private void validarDatos(String codigo, String nombre, double precio)
            throws BusinessException {
        String mensaje = "";
        if (codigo == null || codigo.isEmpty())
            mensaje += "Codigo no puede ser nulo o vacio\n";
        if (nombre == null || nombre.isEmpty() )
            mensaje += "Nombre no puede ser nulo o vacio\n";
        if (precio<=0.00)
            mensaje += "Precio no puede menor o igual a cero\n";
        if (! mensaje.isEmpty()){
            // Crear y Lanzar una excepción de negocio
            throw new BusinessException(mensaje);
        }
    }

    private void validarDuplicado(String codigo) throws BusinessException {
       if (buscar(codigo)!= null)  {
           String msg = "Codigo '"+codigo+"' ya existe.";
           throw new BusinessException(msg);
       }
    }

    public void actualizar(String codigo, String nuevoNombre, double nuevoPrecio) 
            throws BusinessException {
        validarDatos(codigo, nuevoNombre, nuevoPrecio);
        validarExistencia(codigo);
        Producto producto = buscar(codigo);
        producto.setNombre(nuevoNombre);
        producto.setPrecio(nuevoPrecio);
    }

    private void validarExistencia(String codigo) throws BusinessException {
        Producto producto = buscar(codigo);
        if (producto == null){
            String msg = "Codigo "+codigo + " NO existe";
            throw new BusinessException(msg);
        }
    }

    public void eliminar(String codigo) {
        // Buscamos el producto a eliminar
        Producto producto = buscar(codigo);
        // Luego lo removemos de la lista
        productos.remove(producto);
    }

}
